﻿using fuzhu;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NETCore.MailKit.Core;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Org.BouncyCastle.Crypto;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using U8COWeb;
using XXX.api.Controllers;
using XXX.Bo;
using XXX.Common;
using XXX.Models;
using XXX.Models.AS;
using Yonyou.U8.Api.WebApi.Models;
using Yonyou.U8.YF.Api.WebApi.Models;

namespace Yonyou.U8.YF.Api.WebApi.Controllers
{
    [Route("api/GLAccVouch")]
    [ApiController]
    public class ApiGL_BatchController : ControllerBase
    {
        public static readonly object _lockObj = new object();
        private readonly ILogger<ApiGL_BatchController> _logger;
        private readonly IEmailService _EmailService;

        public ApiGL_BatchController(ILogger<ApiGL_BatchController> logger, IEmailService emailService)
        {
            _logger = logger;
            _EmailService = emailService;
        }

        /// <summary>
        /// 凭证写入到U8,一张凭证调用一次
        /// </summary> 
        //[HttpPost]
        //public RetModel Post(JObject JsonObj)
        //{
        //    //一次只执行一个线程
        //    lock (_lockObj)
        //    {
        //        try
        //        {
        //            string requestBody = DbHelper.GetDbString(JsonObj);
        //            //解析传递过来的json信息 
        //            Api_GlModel model = null;
        //            string conStr;
        //            #region 传入json验证
        //            try
        //            {
        //                model = JsonConvert.DeserializeObject<Api_GlModel>(JsonObj.ToString());
        //            }
        //            catch (Exception e)
        //            {
        //                throw new Exception("json结构异常！");
        //            }

        //            if (model == null || model.body == null || model.para == null)
        //            {
        //                throw new Exception("json结构异常!数据不完整！");

        //            }
        //            #endregion

        //            #region 接口调用间隔
        //            string strKey = "gl_accvouch" + Md5Encrypt.MD5(requestBody);

        //            if (CacheHelpCore.GetCacheValue(strKey) == null)
        //            {
        //                CacheHelpCore.SetChacheValue(strKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), CanShu.chkRepeat);
        //            }
        //            else
        //            {
        //                throw new Exception("接口调用间隔过短");
        //            }
        //            #endregion 接口调用间隔

        //            //定义凭证实体，用于凭证操作
        //            GLaccvouchVM glmodel = (GLaccvouchVM)model;

        //            #region 判断para参数的有效性，帐套号，登陆日期
        //            paraEntity ls_pa = model.para;
        //            if (model.para == null)
        //            {
        //                throw new Exception("para数据不可为空！");
        //            }
        //            else if (ls_pa.accid == null)
        //            {
        //                throw new Exception("账套号不可为空！");
        //            }
        //            if (model.body == null || model.body.Count == 0)
        //            {
        //                throw new Exception("body数据不可为空！");
        //            }


        //            RetModel2 ret = DBService.GetConstrByaccount(ls_pa.accid);
        //            if (ret.code != 200)
        //            {
        //                throw new Exception(ls_pa.accid + ret.message);
        //            }

        //            glmodel.conStr = DbHelper.GetDbString(ret.data);
        //            conStr = DbHelper.GetDbString(ret.data);
        //            #endregion


        //            List<Gl_Accvouch> list_js = glmodel.body;
        //            #region 判断凭证类别是否正确

        //            //取唯一的 list_js[j].csign
        //            List<string> lstcsign = list_js.Select(x => x.csign).Distinct().ToList();
        //            //凭证类别和编码对照表
        //            Dictionary<string, string> dictsign = new Dictionary<string, string>();
        //            foreach (var csign in lstcsign)
        //            {
        //                string obj = GLService.code_pzlbxh(csign, conStr);
        //                if (obj == "")
        //                {
        //                    throw new Exception(ls_pa.accid + "账套" + csign + "凭证类别不存在");

        //                }
        //                else
        //                {
        //                    dictsign.Add(csign, obj);
        //                }
        //            }

        //            #endregion


        //            #region 根据guid进行分组 

        //            for (int j = 0; j < list_js.Count; j++)
        //            {
        //                list_js[j].guid = list_js[j].csign + "-" + list_js[j].ino_id;
        //            }
        //            //取唯一的 list_js[j].guid
        //            List<string> lstguid = list_js.Select(x => x.guid).Distinct().ToList();

        //            #endregion

        //            #region 根据分组分别生成凭证 
        //            //List<WebApiResultEntity> listweb = new List<WebApiResultEntity>();

        //            foreach (var guid in lstguid)
        //            {

        //                //分组数据
        //                List<Gl_Accvouch> list_js_f = new List<Gl_Accvouch>();
        //                //清除无用数据
        //                List<Gl_Accvouch> list_js_qc = new List<Gl_Accvouch>();
        //                string errMsg = "";
        //                bool boolIs = true;
        //                #region 判断科目辅助核算，性对客户传递数据，不需要的进行清空

        //                for (int i = 0; i < list_js.Count; i++)
        //                {
        //                    if (list_js[i].guid.Trim() == guid)
        //                    {
        //                        list_js_f.Add(list_js[i]);
        //                        if (dictsign.TryGetValue(list_js[i].csign, out string isignseq))
        //                        {
        //                            list_js[i].isignseq = isignseq;
        //                        }
        //                        //期间，取第一行
        //                        if (list_js[i].iperiod != list_js[0].iperiod)
        //                        {
        //                            list_js[i].iperiod = list_js[0].iperiod;
        //                        }
        //                        //if (GL_Accvouch_Cls.exist_fitem(list_js[i].ccode, list_js[i].cCashItem, list_js[i].cCashItem, list_js[i].citem_id, ref errMsg2) == false)
        //                        //{
        //                        //    errMsg = errMsg + "科目:" + list_js[i].ccode + "项目核算数据" + list_js[i].cCashItem + ";" + citem_id + "在项目档案中不存在" + errMsg2;
        //                        //    return false;
        //                        //}
        //                        #region 判断科目辅助核算，性对客户传递数据，不需要的进行清空
        //                        //科目辅助核算判断
        //                        int b_dep_fzhs = 0;
        //                        int b_person_fzhs = 0;
        //                        int b_cus_fzhs = 0;
        //                        int b_vendor_fzhs = 0;
        //                        int b_fitem_fzhs = 0;
        //                        string cass_item = "";
        //                        string cexch_name = "";
        //                        int b_bend = 0;
        //                        int b_bclose = 0;
        //                        int b_bcdefine1 = 0;
        //                        int b_bcdefine2 = 0;
        //                        int b_bcdefine3 = 0;
        //                        int b_bcdefine4 = 0;
        //                        int b_bcdefine5 = 0;
        //                        int b_bcdefine6 = 0;
        //                        int b_bcdefine7 = 0;
        //                        int b_bcdefine8 = 0;
        //                        int b_bcdefine9 = 0;
        //                        int b_bcdefine10 = 0;
        //                        int b_bcdefine11 = 0;
        //                        int b_bcdefine12 = 0;
        //                        int b_bcdefine13 = 0;
        //                        int b_bcdefine14 = 0;
        //                        int b_bcdefine15 = 0;
        //                        int b_bcdefine16 = 0;
        //                        string errMsg1 = "";
        //                        GLService.code_fzhs(list_js[i].ccode, list_js[i].iyear, ref b_dep_fzhs, ref b_person_fzhs, ref b_cus_fzhs,
        //                            ref b_vendor_fzhs, ref b_fitem_fzhs, ref cass_item, ref cexch_name, ref b_bend, ref b_bclose, ref b_bcdefine1,
        //                            ref b_bcdefine2, ref b_bcdefine3, ref b_bcdefine4, ref b_bcdefine5, ref b_bcdefine6, ref b_bcdefine7,
        //                            ref b_bcdefine8, ref b_bcdefine9, ref b_bcdefine10, ref b_bcdefine11, ref b_bcdefine12, ref b_bcdefine13,
        //                            ref b_bcdefine14, ref b_bcdefine15, ref b_bcdefine16, ref errMsg1, conStr);
        //                        if (b_dep_fzhs == 0 && string.IsNullOrEmpty(list_js[i].cdept_id) == false)
        //                        {
        //                            if (b_person_fzhs == 0 && string.IsNullOrEmpty(list_js[i].cdept_id) == false)
        //                            {
        //                                list_js[i].cdept_id = null;
        //                                errMsg = errMsg + "科目:" + list_js[i].ccode + "部门核算不存在，已清空;";
        //                            }
        //                        }
        //                        if (b_person_fzhs == 0 && string.IsNullOrEmpty(list_js[i].cperson_id) == false)
        //                        {
        //                            list_js[i].cperson_id = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "人员核算不存在，已清空;";
        //                        }
        //                        if (b_cus_fzhs == 0 && string.IsNullOrEmpty(list_js[i].ccus_id) == false)
        //                        {
        //                            list_js[i].ccus_id = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "客户核算不存在，已清空;";
        //                        }
        //                        if (b_vendor_fzhs == 0 && string.IsNullOrEmpty(list_js[i].csup_id) == false)
        //                        {
        //                            list_js[i].csup_id = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "供应商核算不存在，已清空;";
        //                        }

        //                        if (b_fitem_fzhs == 0 && (string.IsNullOrEmpty(list_js[i].citem_class) == false || (string.IsNullOrEmpty(list_js[i].citem_id) == false)))
        //                        {
        //                            list_js[i].citem_id = null;
        //                            list_js[i].citem_class = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "项目核算不存在，已清空;";
        //                        }

        //                        //自定义项
        //                        if (b_bcdefine1 == 0 && string.IsNullOrEmpty(list_js[i].cdefine1) == false)
        //                        {
        //                            list_js[i].cdefine1 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义1不存在，已清空;";
        //                        }
        //                        if (b_bcdefine2 == 0 && string.IsNullOrEmpty(list_js[i].cdefine2) == false)
        //                        {
        //                            list_js[i].cdefine2 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义2不存在，已清空;";
        //                        }
        //                        if (b_bcdefine3 == 0 && string.IsNullOrEmpty(list_js[i].cdefine3) == false)
        //                        {
        //                            list_js[i].cdefine3 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义3不存在，已清空;";
        //                        }
        //                        if (b_bcdefine4 == 0 && string.IsNullOrEmpty(list_js[i].cdefine4) == false)
        //                        {
        //                            list_js[i].cdefine4 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义4不存在，已清空;";
        //                        }
        //                        if (b_bcdefine5 == 0 && string.IsNullOrEmpty(list_js[i].cdefine5) == false)
        //                        {
        //                            list_js[i].cdefine5 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义5不存在，已清空;";
        //                        }
        //                        if (b_bcdefine6 == 0 && string.IsNullOrEmpty(list_js[i].cdefine6) == false)
        //                        {
        //                            list_js[i].cdefine6 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义6不存在，已清空;";
        //                        }
        //                        if (b_bcdefine7 == 0 && string.IsNullOrEmpty(list_js[i].cdefine7) == false)
        //                        {
        //                            list_js[i].cdefine7 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义7不存在，已清空;";
        //                        }
        //                        if (b_bcdefine8 == 0 && string.IsNullOrEmpty(list_js[i].cdefine8) == false)
        //                        {
        //                            list_js[i].cdefine8 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义8不存在，已清空;";
        //                        }
        //                        if (b_bcdefine9 == 0 && string.IsNullOrEmpty(list_js[i].cdefine9) == false)
        //                        {
        //                            list_js[i].cdefine9 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义9不存在，已清空;";
        //                        }
        //                        if (b_bcdefine10 == 0 && string.IsNullOrEmpty(list_js[i].cdefine10) == false)
        //                        {
        //                            list_js[i].cdefine10 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义10不存在，已清空;";
        //                        }
        //                        if (b_bcdefine11 == 0 && string.IsNullOrEmpty(list_js[i].cdefine11) == false)
        //                        {
        //                            list_js[i].cdefine11 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义11不存在，已清空;";
        //                        }
        //                        if (b_bcdefine12 == 0 && string.IsNullOrEmpty(list_js[i].cdefine12) == false)
        //                        {
        //                            list_js[i].cdefine12 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义12不存在，已清空;";
        //                        }
        //                        if (b_bcdefine13 == 0 && string.IsNullOrEmpty(list_js[i].cdefine13) == false)
        //                        {
        //                            list_js[i].cdefine13 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义13不存在，已清空;";
        //                        }
        //                        if (b_bcdefine14 == 0 && string.IsNullOrEmpty(list_js[i].cdefine14) == false)
        //                        {
        //                            list_js[i].cdefine14 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义14不存在，已清空;";
        //                        }
        //                        if (b_bcdefine15 == 0 && string.IsNullOrEmpty(list_js[i].cdefine15) == false)
        //                        {
        //                            list_js[i].cdefine15 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义15不存在，已清空;";
        //                        }
        //                        if (b_bcdefine16 == 0 && string.IsNullOrEmpty(list_js[i].cdefine16) == false)
        //                        {
        //                            list_js[i].cdefine16 = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "自定义15不存在，已清空;";
        //                        }

        //                        string cCashItem = string.IsNullOrEmpty(list_js[i].cCashItem) == false ? list_js[i].cCashItem : null;
        //                        if (string.IsNullOrEmpty(cCashItem) == false)
        //                        {
        //                            bool bo1 = GLService.gpd_xj(cCashItem, list_js[i].ccode, conStr);
        //                            if (!bo1)
        //                            {
        //                                list_js[i].cCashItem = null;
        //                                errMsg = errMsg + "科目:" + list_js[i].ccode + "现金流量不存在，已清空;";
        //                            }
        //                        }
        //                        if (cexch_name.ToString().Trim() == "" && list_js[i].cexch_name != null)
        //                        {
        //                            list_js[i].cexch_name = null;
        //                            errMsg = errMsg + "科目:" + list_js[i].ccode + "币种核算不存在，已清空;";
        //                        }
        //                        if (list_js[i].cexch_name == null)
        //                        {
        //                            if (double.Parse(string.IsNullOrEmpty(list_js[i].md_f) == false ? list_js[i].md_f : "0.00") != 0)
        //                            {
        //                                list_js[i].md_f = "0.00";
        //                                errMsg = errMsg + "科目:" + list_js[i].ccode + "不存在外币，外币借方金额已清空;";
        //                            }
        //                            if (double.Parse(string.IsNullOrEmpty(list_js[i].mc_f) == false ? list_js[i].mc_f : "0.00") != 0)
        //                            {
        //                                list_js[i].mc_f = "0.00";
        //                                errMsg = errMsg + "科目:" + list_js[i].ccode + "不存在外币，外币贷方金额已清空;";

        //                            }

        //                            if (double.Parse(string.IsNullOrEmpty(list_js[i].nfrat) == false ? list_js[i].nfrat : "0.00") != 0)
        //                            {
        //                                list_js[i].nfrat = "0";
        //                                errMsg = errMsg + "科目:" + list_js[i].ccode + "不存在外币，汇率已清空;";

        //                            }
        //                        }
        //                        #endregion
        //                        list_js_qc.Add(list_js[i]);
        //                        //}
        //                        //}

        //                        #endregion

        //                        string resultJson = null;

        //                        #region 调用凭证接口
        //                        if (boolIs)
        //                        {

        //                            try
        //                            {
        //                                WebApiResultEntity resultEntity = GLService.pz_insert(list_js_qc, ref resultJson, conStr);
        //                            }
        //                            catch (Exception ex)
        //                            {
        //                                throw new Exception(ex.Message);
        //                            }
        //                            //            resultEntity = JToken.Parse(resultJson).ToObject<WebApiResultEntity>();
        //                            //            resultEntity.dommsg = item.areaid.ToString().Trim();
        //                            //            if (resultEntity.status == "SUCCESS")
        //                            //            {
        //                            //                resultEntity.error = errMsg;
        //                            //            }
        //                            //            else
        //                            //            {
        //                            //                resultEntity.error = errMsg + resultEntity.error;
        //                            //            }
        //                            //        }
        //                            //        #endregion

        //                            //        #region 插入日志表
        //                            //        try
        //                            //        {
        //                            //            string json_in = JToken.FromObject(list_js_f).ToString();
        //                            //            string json_ref = JToken.FromObject(resultEntity).ToString();
        //                            //            string sql = string.Format(@"INSERT INTO [dbo].[resultEntity]
        //                            //        ([createdate],[guid],[state],[targetcode],[errormsg],[accid],[sourcejson],[resultjson],[ufts])
        //                            //         VALUES('{0}', '{1}', '{2}', '{3}', '{4}', '{5}','{6}','{7}','{8}')"
        //                            //    , DateTime.Now.ToString(), item.areaid.ToString().Trim(), resultEntity.status, resultEntity.code
        //                            //    , resultEntity.error, ls_pa.accid, json_in, json_ref, ufts);
        //                            //            sqlDBHelper.ExecuteSql(sql);
        //                            //        }
        //                            //        catch (Exception e)
        //                            //        {
        //                            //            resultEntity.guid = guid;
        //                            //            resultEntity.status = "FAILED";
        //                            //            resultEntity.error = "日志：" + e.Message;
        //                            //        }
        //                            //        #endregion
        //                            //        listweb_all.Add(resultEntity);
        //                            //    }
        //                            //}
        //                            //catch (Exception e)
        //                            //{
        //                            //    resultEntity.dommsg = guid;
        //                            //    resultEntity.status = "FAILED";
        //                            //    resultEntity.error = "json数据异常！" + e.ToString();
        //                            //    listweb_all.Add(resultEntity);
        //                            //}
        //                            //#endregion

        //                            //将 JSON 数据保存到数据库中
        //                            //JsonSaveService.saveLog2("凭证", model.para.accid, requestBody, ret.code, ret.message);
        //                            //if (ret.code != 200)
        //                            //{
        //                            //    try
        //                            //    {
        //                            //        _EmailService.Send(CanShu.mail.ToAddress, CanShu.cZT + "部门创建错误：" + model.cDepCode, "报文:\r\n" + requestBody + "\r\n" + "结果：\r\n" + ret.message);

        //                            //    }
        //                            //    catch (Exception ex)
        //                            //    {
        //                            //        不处理
        //                            //            _logger.LogError("发送邮件错误");
        //                            //    }
        //                            //}
        //                        }
        //                        #endregion
        //                    }
        //                }
        //                #endregion

                       
        //            }
        //            return DBService.ReOK(new List<object>());
        //        }




        //        catch (Exception ex)
        //        {
        //            //_EmailService.Send(CanShu.mail.ToAddress, CanShu.cZT + "部门创建错误,程序错误：" + model.cDepCode, "报文:\r\n" + requestBody + "\r\n" + "结果：\r\n" + ex.Message);
        //            return DBService.ReError(ex.Message);
        //        }
        //    }


        //}



        /// <summary>
        /// 凭证写入到U8
        /// </summary> 
        [HttpPost]
        [Route("insert")]
        public RetModel Insert(Api_GlModel JsonObj)
        {


            return DBService.ReOK(new List<object>());


        }

    }
}
        
 
